<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //案例1：用户登录验证（封装）
        //         function logincheck(username,password,inputUsername,inputPassword){
        //             if(inputUsername===username&&inputPassword===password){
        //                 console.log('Login successful!');

        //             }else{
        //                 console.log('Invalid username or password');
        //             }
        //         }
        // logincheck('abcdefg',123456,'abcdefg',123456)

        //案例2：购物车折扣计算（封装）
        //         function discount(totalAmount,isMeber){
        //         if(totalAmount>100&&isMeber){
        //             totalAmount*=0.9
        //             console.log("Discount applied. Total amount is: $" +totalAmount);

        //         }else{
        //             console.log("No discount. Total amount is: $" +totalAmount);
        //         }
        //     }
        // discount(120,true)
        //案例3：while 循环案例：猜数字游戏（封装）
        // function BullsandCows() {
        //     let targetNumber = Math.floor(Math.random() * 100) + 1
        //     let guess = null
        //     let attempts = 0
        //     while (guess !== targetNumber) {
        //         guess = parseInt(prompt('Guess the number (between 1 and 100):'), 10)
        //         attempts++
        //         if (guess < targetNumber) {
        //             console.log("Too low! Try again.");
        //         } else if (guess > targetNumber) {
        //             console.log("Too high! Try again.");
        //         } if (guess === targetNumber) {
        //             console.log(`${guess}Congratulations! You guessed the number in ${attempts} attempts.`);
        //         }
        //     }
        // }
        // BullsandCows()

        //案例4：for案例：遍历数组并计算总和和平均值（封装）
        // function mean(numbers){
        //     let sum=0
        //     for(let i=0;i<numbers.length;i++){
        //         sum+=numbers[i]
        //     }
        //     let average=sum/numbers.length
        //     console.log(`Sum:${sum}`);
        //     console.log(`Average:${average}`);
        // }
        // let arr=[1,2,3,4,5,6,7,8,9]
        // mean(arr)

        //案例5：for案例：打印乘法表（封装）
        // function multiplicationtable(){
        //     for(let i=1;i<=9;i++){
        //         let row=''
        //         for(let j=1;j<=i;j++){
        //         row+=`${j}*${i}=${i*j}\t`
        //     }
        //     console.log(row);
        //     }
        // }
        // multiplicationtable()

        //案例6：for...of 案例：过滤数组中的奇数并输出** （封装）
        //    function oddnumber(Numbers){
        //     for (const num of Numbers) {
        //         if(num%2!==0){
        //             console.log(num);
        //         }
        //     }
        //    }
        //    let arr=[1,2,34,5,6,7,9]
        //    oddnumber(arr)

        //案例7：for...of 案例：查找并输出字符串数组中包含特定子字符串的元素** （封装）
        // function Specificsubstring(str, phrases) {
        //     for (const phrase of phrases) {
        //         if (phrase.includes(str)) {
        //             console.log(phrase);
        //         }
        //     }
        // }
        // arr = ['hello', 'javascropt', 'openai']
        // Specificsubstring('ja', arr)

        //案例8：for...of 案例：计算并输出包含负数的数组的正数总和** （封装）
        // function PositiveSum(mixedNumbers){
        //     let sum=0
        //     for (const num of mixedNumbers) {
        //         if(num>0){
        //             sum+=num
        //         }
        //     }console.log(sum);
        // }
        // let arr=[-2,1,5,8,-2,-5]
        // PositiveSum(arr)

        //案例9：for...in 案例:计算对象中数值属性的总和**
        // function Sumofnumericalattributes(data){
        //     let sum=0
        //     for (const key in data) {
        //         if (typeof data[key]==='number') {
        //             sum+=data[key]
        //         }
        //     }
        //     console.log(sum);
        // }
        // let data={
        //     a:4,
        //     b:7,
        //     c:'nbpro',
        //     d:1
        // }
        // Sumofnumericalattributes(data)

        //案例10：forEach 案例:查找并输出数组中的正数并计算它们的平均值** （封装）
        // function justmean(Numbers){
        //     let sum = 0;
        //     let count = 0;
        //     Numbers.forEach(num => {
        //         if(num>0){
        //             sum+=num;
        //             count++
        //         }
        //     });
        //     const average=sum/count
        //     console.log(average);
        // }
        // let arr=[1,2,3,5,-3,5,-7]
        // justmean(arr)

        //案例11：map 案例:将对象数组中的特定属性值大写化**  （封装）
        //         function case11(people){
        //             const uppercasedNames=people.map(person=>{
        //                 return person.name.length>3?{...person,name:person.name.toUpperCase()}:person;
        //             })
        //             console.log(uppercasedNames);
        //         }
        //         const people = [
        //   { name: 'Alice', age: 25 },
        //   { name: 'Bob', age: 30 },
        //   { name: 'Charlie', age: 35 }
        // ];
        // case11(people)

        //案例12：map 案例:将字符串数组中的特定子字符串替换为另一字符串**（封装）
        //  function case12(phrases,str,strpro){
        //     const updatedPhrases=phrases.map(phrase=>{
        //         return phrase.includes(str)?phrase.replace(str,strpro):phrase
        //     })
        //     console.log(updatedPhrases);
        //  }
        //  const phrases = ['hello world', 'javascript is fun', 'hello openai', 'coding is great'];
        //  case12(phrases,'hello','nb')

        //案例13：使用 map、filter 和 reduce 方法结合的案例:计算并输出长度大于 5 的字符串的总长度**  （封装）
        // function case13(phrases){
        //     const totalLength=phrases
        //     .filter(phrase=>phrase.length>5)
        //     .map(phrase=>phrase.length)
        //         .reduce((sum,length)=>sum+length,0)
        //         console.log(totalLength);
        // }
        // const phrases = ['hello world', 'javascript', 'openai', 'coding is fun'];
        // case13(phrases)

        //案例14：使用 map、filter 和 reduce 方法结合的案例:计算正数数组的平方和，并排除负数**  （封装）
        // function case14(numbers){
        //     const squareSum=numbers
        //     .filter(num=>num>0)
        //     .map(num=>num*num)
        //     .reduce((sum,squared)=>sum+squared,0)
        //     console.log(squareSum);
        // }
        // const numbers = [-5, 3, -2, 4, 6, -1];
        // case14(numbers)
        
         //案例15：使用 map、filter 和 reduce 方法结合的案例:处理用户数据，提取年龄大于 18 的用户，并计算他们的平均年龄**  （封装）
         //          function case15(users){
//          const averageAge=users
//          .filter(user=>user.age>18)
//          .map(user=>user.age)
//          .reduce((sum,age,_,array)=>sum+age/array.length,0)
//          console.log(averageAge);
//         }
         //         const users = [
         //   { name: 'Alice', age: 22 },
         //   { name: 'Bob', age: 17 },
         //   { name: 'Charlie', age: 30 },
         //   { name: 'David', age: 15 }
         // ];
        // case15(users)

         //案例16：使用 findIndex、splice 方法结合案例:在购物车中移除指定商品**   （封装）
         //          function case16(cart,itemIdToRemove){
//             const indexToRemove=cart.findIndex(item=>item.id===itemIdToRemove)
//             if(indexToRemove!==-1){
//                 cart.splice(indexToRemove,1)
//             }
//             console.log(cart);
//          }
         //          const cart = [
         //   { id: 1, name: 'Laptop', quantity: 1 },
         //   { id: 2, name: 'Mouse', quantity: 2 },
         //   { id: 3, name: 'Keyboard', quantity: 1 }];
         //          case16(cart,3)

         //案例17：使用 findIndex、splice 方法结合案例:更新数组中的指定对象属性** （封装）
         //          function case17(employess,employeeIdToUpdate,newRole){
//             const indexToUpdate=employess.findIndex(employee=>employee.id===employeeIdToUpdate)
//             if(indexToUpdate!==-1){
//                 employees[indexToUpdate].role=newRole
//             }
//             console.log(employees);
//          } 
         //          const employees = [
         //   { id: 1, name: 'John', role: 'Developer' },
         //   { id: 2, name: 'Jane', role: 'Designer' },
         //   { id: 3, name: 'Tom', role: 'Manager' }
         // ];
         //          case17(employees,2,'ikun')

         //案例18：使用 findIndex、splice 方法结合案例:将数组中的第一个负数替换为零**  （封装）
          function case18(Numbers){
            const indexToReplace=Numbers.findIndex(num=>num<0)
            if(indexToReplace!==-1){
                Numbers.splice(indexToReplace,1,0)
            }
            console.log(Numbers);
          }
          const numbers = [4, -1, 6, -2, 7];
          case18(numbers)
    </script>
</body>

</html>